(() => {
  class Person {
    /**
     * TS可以在属性前添加属性修饰符
     *  public: 修饰的属性可以在任意的位置访问(修改)默认值
     *  private: 私有属性只能在内部进行访问(修改)
     *    -通过在类中添加方法使得私有属性可以被外部访问(get,set)
     *  protected: 受保护的属性, 只能在当前类和当前类的子类中访问
     *    -多用于继承当中
     */
    public name: string
    private age: number
    protected sex: number

    constructor(name: string, age: number, sex: number) {
      this.name = name
      this.age = age
      this.sex = sex
    }

    get getName(): string {
      return this.name
    }

    get getAge(): number {
      return this.age
    }

    set setAge(age: number) {
      if (age >= 0)
        this.age = age
    }
  }


  class Zhou extends Person {
    test() {
      console.log(this.sex);
      super.setAge = 100
    }
  }

  const zzh = new Person('周张恒', 19, 1)
  const zz = new Zhou('周张恒', 19, 1)
  zz.test() // 1
  console.log(zz);

  // console.log(zzh.age); //私有属性不能访问
  zzh.setAge = 888
  console.log(zzh.getAge);

  // 语法糖
  class Test {
    //直接将属性定义到构造器中, 可以减去写 this
    constructor(public name: string) {

    }
  }
  const test = new Test("test")
  console.log(test); //Test {name: 'test'}
  

})()